/**
 * new运算符原理：
 * 1.使用Object.create方法，以函数的原型作为原型对象创建一个新对象
 * 2.显示指定this。指定新创建的对象作为函数的this，执行函数。
 * 3.如果函数执行返回对象，则返回函数执行结果，否则返回新创建的对象。
 */

function hjmNew(fn, ...args) {
    var obj = Object.create(fn.prototype); // <==> var obj = {}; Obj.__proto__ = fn.prototype;
    var res = fn.call(obj, ...args);
    return res instanceof Object ? res : obj;
}